package org.apache.rocketmq.client.java.clientapis;

import java.time.Duration;
import java.util.Optional;


/**
 * @课程描述:从零带你写框架系列中的课程，整个系列包含netty，xxl-job，rocketmq，nacos，sofajraft，spring，springboot，disruptor，编译器，虚拟机等等。
 * @author：陈清风扬，个人微信号：chenqingfengyangjj。
 * @方法描述：客户端信息配置类
 */
public class ClientConfiguration {
    //服务端网络地址，这个字符串可能包含多个网络地址
    private final String endpoints;

    //会话凭证提供对象，登陆密钥就可以从这个对象中获取，但在我们的测试类中并没有使用什么密钥，所以也用不到这个成员变量
    private final SessionCredentialsProvider sessionCredentialsProvider;

    //请求超时时间
    private final Duration requestTimeout;


    ClientConfiguration(String endpoints, SessionCredentialsProvider sessionCredentialsProvider, Duration requestTimeout) {
        this.endpoints = endpoints;
        this.sessionCredentialsProvider = sessionCredentialsProvider;
        this.requestTimeout = requestTimeout;
    }


    public static ClientConfigurationBuilder newBuilder() {
        return new ClientConfigurationBuilder();
    }


    public String getEndpoints() {
        return endpoints;
    }


    public Optional<SessionCredentialsProvider> getCredentialsProvider() {
        return null == sessionCredentialsProvider ? Optional.empty() : Optional.of(sessionCredentialsProvider);
    }


    public Duration getRequestTimeout() {
        return requestTimeout;
    }
}
